/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloAlumno;

import com.ipartek.formacion.gestformwww.modelo.ModeloCorreo;

import com.ipartek.formacion.gestformwww.modelo.beans.Correo;
import com.ipartek.formacion.gestformwww.modelo.beans.InformeCorreo;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Curso
 */
public class EnviarCorreoAccion implements Accion {

   
    private final String visualizarcurso = "visualizar-curso-accion";
    private final String visualizarenviarcorreo = "visualizar-enviar-email-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
        HttpSession session = request.getSession();
        AccionServlet as=(AccionServlet) servlet;
        ModeloAlumno malumno = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        ModeloCorreo mcorreo = (ModeloCorreo) servlet.getServletContext().getAttribute("ModeloCorreo");
        String[] ids = request.getParameterValues("idAlumno");
        String[] correos = request.getParameterValues("email");
        String aleatorio = (String) session.getAttribute("aleatorioEnviarMail");
        String asunto = request.getParameter("asunto");
        String mensaje = request.getParameter("textoemail");
        Correo c = new Correo();
        Timestamp fecha = new Timestamp((new Date()).getTime());
        ArrayList<Correo> mails = new ArrayList<Correo>();
        ArrayList<String> errorm = new ArrayList<String>();
        ArrayList<InformeCorreo> informes = new ArrayList<InformeCorreo>();
      

        boolean enviarMail = true;
        Integer curId = Integer.parseInt(request.getParameter("idCurso"));

        if (aleatorio != null) {
            if (request.getParameter("aletorioEnviarMail") != null) {
                if (request.getParameter("aletorioEnviarMail").equals(aleatorio)) {
                    enviarMail = false;
                } else {
                    session.setAttribute("aletorioEnviarMail", request.getParameter("aletorioEnviarMail"));
                }
            }
        } else {
            session.setAttribute("aletorioEnviarMail", request.getParameter("aletorioEnviarMail"));
        }
        if (!Verificador.esCorrecto(mensaje) && !Verificador.esCorrecto(asunto)) {
            errorm.add("error-mail-no-valido");
        }
        for (String email : correos) {
            if (!Verificador.esEmail(email)) {
                errorm.add("error-direccion-no-valida");
            }
        }
        if (!errorm.isEmpty()) {
            enviarMail = false;
        }

        if (session.getAttribute("usuario") != null && curId != null && request.getMethod().equalsIgnoreCase("POST")) {
            if (enviarMail) {
                if (request.getParameterValues("idAlumno") != null) {
                    //Enviar Mail
                    // Se debe crear un archivo de propiedades que
                    // contenga el nombre del servidor SMTP

                    for (int i = 0; i < ids.length; i++) {
//                        try {
//                            c = new Correo();
//                            c.setCanId(mcandidato.getCandidatoNif(malumno.visualizarAlumno(Integer.parseInt(ids[i]), curId).getAluNIF()));
//                            c.setDestinatario(correos[i]);
//                            c.setAsunto(asunto);
//                            c.setCuerpo(mensaje);
//                            c.setCurId(curId);
//                            c.setFecha(fecha);
//                            mails.add(c);
//                        } catch (GestorFormacionExcepcion ex) {
//                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
//                        }
                    }
                    try {
                        mcorreo.enviarCorreo(mails, servlet.getServletContext());
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        request.setAttribute("errores", errorm);
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcurso),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex1) {
                            Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (InstantiationException ex1) {
                            Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (IllegalAccessException ex1) {
                            Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        }
                      
                    }

                    for (Correo co : mails) {
                        InformeCorreo inf = new InformeCorreo();
//                        can = new Candidato();
//                        try {
//                            can = mcandidato.getCandidato(co.getCanId());
//                            inf.setNombre(can.getCanNom());
//                            inf.setApellidos(can.getCanApe1() + " " + can.getCanApe2());
//                            inf.setDireccion(co.getDestinatario());
//                            inf.setAsunto(co.getAsunto());
//                            inf.setCuerpo(co.getCuerpo());
//                            inf.setEnviado(co.isEnviado());
//                            inf.setFecha(co.getFecha());
//                            informes.add(inf);
//                        } catch (GestorFormacionExcepcion ex) {
//                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
//                            request.setAttribute("errores", errorm);
//                            router = factoria.getAction(servlet, visualizarcurso).ejecuta(servlet, request, response);
//                        }
                    }
                    request.setAttribute("informe", informes);
                    request.setAttribute("contenido", "visualizar-informe-email");
                    request.setAttribute("idCurso", curId);
                    router = new AccionRouter("principal", true);

                } else {
                    request.setAttribute("errores", "error-no-mail");
                    try {
                        router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarcurso),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            } else {
                request.setAttribute("errores", errorm);
                try {
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarenviarcorreo),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(EnviarCorreoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
           
            }
        } else {
            router = new AccionRouter("inicio");


        }
        return router;
    }

   
}
